/**
 * 比对新旧数据是否有差异（支持对象/数组，只关注关键业务字段）
 * @param {Object|Array} newData 新数据（接口返回的原始数据）
 * @param {Object|Array} oldData 旧数据（前端缓存的响应式数据）
 * @param {Array} keyFields 需要比对的关键字段（可选，默认比对常见商品字段）
 * @returns {boolean} true=有差异，false=无差异
 */
export function isDataChanged(newData, oldData, keyFields = ['goodsname', 'price', 'img', 'market_price', 'id']) {
  // 处理数据结构：如果是数组，取第一个元素（适配你的商品列表场景）
  const normalizeData = (data) => {
    if (Array.isArray(data) && data.length > 0) {
      return data[0]; // 数组场景下默认比对第一个元素
    }
    return data; // 对象场景直接返回
  };

  const newItem = normalizeData(newData);
  const oldItem = normalizeData(oldData);

  // 旧数据为空时，视为有差异（需更新）
  if (!oldItem) return true;
  // 新数据为空时，视为有差异（数据被删除）
  if (!newItem) return true;

  // 遍历关键字段比对
  for (const field of keyFields) {
    // 处理字段不存在的情况，默认空字符串
    const newVal = newItem[field] !== undefined ? newItem[field] : '';
    const oldVal = oldItem[field] !== undefined ? oldItem[field] : '';

    // 深比对：如果是对象/数组，转JSON字符串比对；基础类型直接比对
    const getCompareValue = (val) => {
      return typeof val === 'object' && val !== null
        ? JSON.stringify(val)
        : val;
    };

    if (getCompareValue(newVal) !== getCompareValue(oldVal)) {
      return true; // 有差异
    }
  }

  return false; // 无差异
}